// 打印内容
/**
 * @des 打印的方法
 * @param {[String|Object]} body require true
 * @param {Array} styleList require false 样式
 * @param {String} scale require false 缩放比例
 * body 1:自定义字符串 可以把样式写到行内
 * body 2:html节点  例如：this.$refs.name.$el/this.$el
 * 可以所有style标签全部传入当作样式--styleList = Array.from(document.getElementsByTagName('style'))
 */
export const _print = (body, styleList = [], scale = '1') => {
  // 把所有样式放入打印区域
  let styleStr = styleList.map(item => {
    return item.nodeType ? item.cloneNode(true).outerHTML : ''
  })
  // table字段太多是要缩放打印
  let width = 100 / Number(scale)
  body = body.nodeType ? body.outerHTML : body
  let printStr = `<html><head><meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
      <style media="print">
          @page {
            size: auto;  /* auto is the initial value */
            margin: 5mm 10mm; /* this affects the margin in the printer settings */
          }
      </style>
      <style media="print">
        html,body{height:100%; margin: 0; padding: 0;}img{max-width:100%;max-height:100%;margin:0 auto}
        body{width: ${width}%; transform:scale(${scale});transform-origin: left top;}
      </style>
      ${styleStr.join('')}
      </head><body>
    `
  printStr = printStr + body + '</body></html>'
  // 打印弹窗
  _printMotheds(printStr)
}
// 兼容火狐 谷歌 ie
const _printMotheds = (str) => {
  let browser = myBrowser()
  if (['FF', 'SOUGOU'].includes(browser)) {
    printByOpenWindow(str)
  } else {
    printByIframe(str)
  }
}
// 打开新窗口
const printByIframe = (str) => {
  let iframe = document.createElement('IFRAME')
  iframe.setAttribute('style', 'position:absolute;width:0px;height:0px;left:-500px;top:-500px;')
  document.body.appendChild(iframe)
  let doc = iframe.contentWindow.document
  doc.write(str)
  doc.close()
  iframe.contentWindow.onload = ()=>{
    iframe.contentWindow.focus()
    iframe.contentWindow.print()
    document.body.removeChild(iframe)
  }
}
// 利用iframe--避免打印影响原网页
const printByOpenWindow = (str) => {
  var page = window.open('', '_blank')
  page.document.write(str) // 写入打印页面的内容
  page.print() // 打印
  var userAgent = navigator.userAgent
  if ((userAgent.indexOf('compatible') > -1 && userAgent.indexOf('MSIE') > -1) || (userAgent.indexOf('Edge') > -1) || (userAgent.indexOf('Trident') > -1 && userAgent.indexOf('rv:11.0') > -1)) {
    // IE浏览器
    page.document.execCommand('print')
  } else {
    console.log('not IE')
  }
  page.close() // 关闭打印窗口
}
// 获取浏览器类型
const myBrowser = () => {
  var userAgent = navigator.userAgent // 取得浏览器的userAgent字符串
  var isOpera = userAgent.indexOf('Opera') > -1
  if (isOpera) {
    return 'Opera'
  } // 判断是否Opera浏览器
  if (userAgent.indexOf('Firefox') > -1) {
    return 'FF'
  } // 判断是否Firefox浏览器
  if (userAgent.indexOf('Chrome') > -1) {
    return 'Chrome'
  }
  if (userAgent.indexOf('Safari') > -1) {
    return 'Safari'
  } // 判断是否Safari浏览器
  if (userAgent.indexOf('compatible') > -1 && userAgent.indexOf('MSIE') > -1 && !isOpera) {
    return 'IE'
  } // 判断是否IE浏览器
  if (userAgent.toLowerCase().indexOf('se 2.x') > -1) {
    return 'SOUGOU'
  }
}
